<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../../vue.js"></script>
</head>

<body>
    <pre>
        过滤器的作用就是 格式化数据 例如 格式化 时间、日期、首字母大写
        使用过滤器带参数的用法， 第一个参数为 需要格式化的参数信息， 第二个参数为 过滤器传递的 实参
    </pre>
    <div class="box">
        <div>{{date | format('yyyy-MM-dd')}}</div>
    </div>
    <script>
        Vue.filter('format', function(val, params) {
            function dateFormat(date, format) {
                if (typeof date === "string") {
                    var mts = date.match(/(\/Date\((\d+)\)\/)/);
                    if (mts && mts.length >= 3) {
                        date = parseInt(mts[2]);
                    }
                }
                date = new Date(date);
                if (!date || date.toUTCString() == "Invalid Date") {
                    return "";
                }
                var map = {
                    "M": date.getMonth() + 1, //月份 
                    "d": date.getDate(), //日 
                    "h": date.getHours(), //小时 
                    "m": date.getMinutes(), //分 
                    "s": date.getSeconds(), //秒 
                    "q": Math.floor((date.getMonth() + 3) / 3), //季度 
                    "S": date.getMilliseconds() //毫秒 
                };

                format = format.replace(/([yMdhmsqS])+/g, function(all, t) {
                    var v = map[t];
                    if (v !== undefined) {
                        if (all.length > 1) {
                            v = '0' + v;
                            v = v.substr(v.length - 2);
                        }
                        return v;
                    } else if (t === 'y') {
                        return (date.getFullYear() + '').substr(4 - all.length);
                    }
                    return all;
                });
                return format;
            }
            return dateFormat(val, params);
        })
        var vm = new Vue({
            el: '.box',
            data: {
                date: new Date()
            },
            // 局部 过滤器
            // filters: {
            //     upper: function(val) {
            //         return val.charAt(0).toUpperCase() + val.slice(1)
            //     }
            // }
        })
    </script>
</body>

</html>